BSEARCH

#include <search.h>    требуется только для объявления функции
            
char *bsearch(key,base,num,width,compare);
char *key;             ключ поиска
char *base;            указатель  на  поисковую   базу данных
unsigned num,width;    число и размер элементов
int (*compare)();      указатель на функцию  сравнения

Описание.
Функция bsearch производит двоичный поиск в отсортированном массиве из num элементов, размер каждого элемента равен width байт. Base - указатель на начало массива, key - значение ключа поиска.
Аргумент compare является указателем на процедуру, поставляемую пользователем, которая сравнивает два элемента массива и возвращает значение, определяющее их отношение. В течении поиска функция bsearch может вызывать процедуру compare один или несколько раз, передавая в каждом вызове указатели на два элемента массива. Процедура должна сравнивать элементы, а затем возвращать одно из следующих значений.

ЗНАЧЕНИЕ            	СМЫСЛ ЗНАЧЕНИЯ
меньше 0         		element1 меньше, чем element2
0             		element1 равен element2
больше 0         		element1 больше, чем element2

Возвращаемое значение.
Функция bsearch возвращает указатель на первое вхождение ключа key в массив, на который указывает base.
Если key не найден, функция возвращает NULL.

Пример:

            
/* Функция bsearch производит двоичный поиск  в  отсортиро-
         ванном  массиве  для  элемента  "key"  и  возвращает указатель на
         структуру, в которой находится ключ key, или возвращает NULL, ес-
         ли ключа нет. */
            
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare();
      
/* должна быть объявлена как функция */
            
main (argc, argv)
                 int argc;
                 char **argv;
{
            
char **result;
char *key = "PATH";
            
/* следующий  оператор  находит  аргумент,  начинающийся  с
"PATH", в предположении, что аргументы лексикографически отсорти-
рованы */
            
result = (char **)bsearch((char *)&key,(char *)argv, argc, sizeof(char *),compare);

if (result) printf ("%s found\n", *result);
                  else
printf("PATH not found!\n");
}
            
int compare (arg1, arg2)
                char **arg1, **arg2;
{
 return(strncmp(*arg1, *arg2, strlen(*arg1)));
}

Hosted by uCoz